package com.xiongwei.collection;

import java.util.Objects;

/**
 * HashMap之所以能根据key拿到value,是它内部通过空间换时间的方法,用一个大数组存储value,根据key计算value应该存在哪个索引
 * 通过key计算索引的方式是调用key对象的hashCode()
 *
 * @author XiongWei
 * @date 2021/1/7
 */
public class HashMapUse {

    /**
     * 要正确使用hashMap,作为key的类必须覆写equals和hashCode方法
     * 一个类如果覆写了equals,就必须覆写hashCode,覆写规则为:
     *      1.如果equals返回true,则hashCode返回值必须相等
     *      2.如果equals返回false,则hashCode返回值尽量不要相等
     *
     * 实现hashCode()可通过Objects.hashCode()辅助实现
     */
}

class PersonHash {
    String firstName;
    String lastName;
    int age;

    public int hashCodeOld() {
        int h = 0;
        h = 31 * h + firstName.hashCode();
        h = 31 * h + lastName.hashCode();
        h = 31 * h + age;
        return h;
    }

    @Override
    public int hashCode() {
        return Objects.hash(firstName, lastName, age);
    }
}